iT邦幫忙

DAY 6
1

哇咧~夠了(Oracle SQL)系列 第 6

戲法人人會變(Oracle SQL)。(2013/09/21)

  • 分享至 

  • xImage
  •  

以前學basic,有些基本練習題,曾經想過種題目能夠用單一SQL做出嗎?
例如: 用迴圈寫出可列印
1
2
3
4
3
2
1

或是
*
**
***
****
***
**
*
這類需求通常不會是SQL開發過程會用到的,但用SQL的數字函數來解,也可以讓頭腦動一動,以防老人癡呆提早到來。
但可能數學觀念要好一點,不然真的會暈頭轉向,舉白旗投降。

  1. 癥結點在4之後要逆轉,所以需要用到絕對值的觀念,總筆數是7。
    當然你可以直接用decode處理啦~那就把題目改大1~99~1好了!
    觀察

    select abs(rownum -4) /* (7+1)/2=4, (99+1)/2=50 */
    from all_tables
    where rownum <= 7

結果是
3
2
1
0
1
2
3
有沒有注意到這是相反的結果,如果把這個數字再用4去減掉呢?

select 4 - abs(rownum -4)  
  from all_tables
 where rownum <= 7

結果是
1
2
3
4
3
2
1
OK,果然是我們要的

  1. 這個題型,把這個用法如法炮製即可

    rpad('', 4 - abs(rownum -4) , '☆')

萬一題目是偶數行呢?
1
2
3
4
4
3
2
1
試試把4改成4.5,再加上trunc玩看看囉。

2013/9/23 補充

select 4 - trunc(abs(rownum -4.5)  ) ans
  From All_Tables
 where rownum <= 8

"ANS"
1
2
3
4
4
3
2
1


上一篇
數字轉成等比例的符號(Oracle SQL)。(2013/09/20)
下一篇
轉檔的小技巧(Oracle SQL)。(2013/09/22)
系列文
哇咧~夠了(Oracle SQL)28
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
月半車甫
iT邦研究生 3 級 ‧ 2013-09-24 08:23:18

更正☆的寫法,因為''似乎會造成NULL結果。改成' '+1碼

&lt;pre class="c" name="code">select rpad(' ', 1+4 - abs(rownum -4) , '☆') aa
  From All_Tables
 where rownum &lt;= 7

結果
" ☆"
" ☆☆"
" ☆☆☆"
" ☆☆☆☆"
" ☆☆☆"
" ☆☆"
" ☆"

我要留言

立即登入留言